home *** CD-ROM | disk | FTP | other *** search
- εTÉCNICAS VIRICASπ
- ε----------------π
-
- Güeno, seguimos con nuestro cursillo (ejem) de técnicas víricas. Este
- número nos dedicaremos a una nimiedad (es que no tenía ganas de hacerlo muy
- largo), y son... ¡técnicas antiheurísticas!
-
- La verdad es que esto es bien fácil, pero daré algunos truquillos para
- que no tengais que pensarlos vosotros... vaguillos!
-
- Bien, vamos a guiarnos por las banderas del δThunderByteπ, que es uno de
- los mejores anti-virus que hay (a mi juicio). Si detectamos un virus con este,
- nos dará diferentes banderas o "Ωflagsπ", que es lo que se intenta evitar.
-
- Una de las más importantes es el flag "δLπ", que nos dice que el progra-
- ma captura la ejecución de software. Esto lo hacen los virus para infectar por
- ejecución, como sabréis, y en concreto se hace esto:
-
-
- ΓNuevaInt21h: CMP AX, 4B00h φ; Función en la int 21h que ejecu-π
- Γ φ; ta un programa π
- Γ JZ InfectaPrograma φ; Queda claro, ¿no? π
- Γ IRET π
- Γ φ; Es así más o menos. π
-
- Esto, simplemente, ya revela la voluntad del programa en capturar la
- ejecución de programas para su infección. Pero, haciendo lo siguiente, se hace
- lo mismo:
-
- ΓNuevaInt21h: CMP AH, 4Chπ
- Γ JAE FinInterrupcionπ
- Γ CMP AH, 4Ah π
- Γ JBE FinInterrupcion π
- Γ OR AL, AL π
- Γ JZ InfectaPrograma π
- ΓFinInterrupcion: IRET π
-
- ΓInfectaPrograma: ...π
-
-
- Esto hace exactamente lo mismo que el primer ejemplo, nada mas que,
- por comprobación indirecta... ¡logramos evitar el flag! (sí, sí, ya sé que
- ocupa más espacio, pero compensa una cosa por otra).
-
- Otro flag bastante importante es el de la diferenciación en un archivo
- si es δ.COMπ o δ.EXEπ. Un virus lo hace leyendo los 2 primeros bytes y mirando si
- son 'δMZπ' o 'δZMπ' (inicio de una cabecera de EXE). Podríais decir: "¿Y qué tal
- si se hace mirando el nombre del archivo?". Esto conlleva problemas, sobre to-
- do por el propio ΩDOSπ: el DOS no mira la extensión al ejecutar, sino estos dos
- primeros bytes, así que podremos tener un δ.COMπ renombrado a δ.EXEπ y viceversa.
- Por tanto es más seguro hacer lo de siempre.
-
- El δThunderByteπ, ante esta técnica, nos marcará el flag 'δZπ'. Y la solu-
- ción es bien fácil: comprobación indirecta (¿os suena?). Hay un montón de ma-
- neras de hacer lo mismo sin que sea tan obvio nuestro objetivo. Este es sólo
- un ejemplo. Esta sería la manera habitual:
-
- Γ CMP WORD PTR [LosDosPrimerosBytes], 'MZ'π
- Γ JZ EsunEXE π
- Γ CMP WORD PTR [LosDosPrimerosBytes], 'ZM'π
- Γ JZ EsunEXE π
- Γ EsunCOM: ... π
-
- Y esta es una manera alternativa que evita la activación del flag:
-
- Γ MOV AX, [LosDosPrimerosBytes]π
- Γ XOR AX, 'MZ' φ; Un XOR dejará a 0 AX si éste esπ
- φ; 'MZ' π
- Γ JZ EsunEXE π
- Γ CMP AX, 1717h φ; Si fuera 'ZM', hacer una opera-π
- φ; ción 'ZM' XOR 'MZ' da el valor π
- φ; 1717h π
- Γ JZ EsunEXEπ
- Γ EsunCOM: ...π
-
- Creo que la idea está captada, ¿no? Se trata de buscar otra manera de
- poner lo mismo, investigando y probando hasta que todos los flags compromete-
- dores desaparezcan. Ahora una lista de los flags más comunes y a qué son de-
- bidos:
-
- ΩFlag τDescripcionπ
- Ω---- τ-----------π
-
- δZ φ--> ∩ El programa diferencia entre EXE y COM.π
-
- Θ- Causa:π Instrucciones CMP XXX, 'MZ' ó CMP XXX, 'ZM'
-
- δL φ--> ∩ El programa captura la ejecución de software.π
-
- Θ- Causa:π Instrucción CMP AH, 4Bh ó CMP AX, 4BXXh
-
- δM φ--> ∩ El programa tiene código para quedarse residente en memoria.π
-
- Θ- Causa:π Instrucciones de enganche de interrupciones por medio de la
- función 25h de la interrupción 21h o manipulaciones directas
- de la TVI (Tabla de Vectores de Interrupción).
-
- δA φ--> ∩ Reserva de memoria sospechosa o no standardπ
-
- Θ- Causa:π Instrucciones habituales de instalación por MCBs, que se ha
- convertido en el "standard" de los virus. Por ligeras varia-
- ciones en estas instrucciones, se puede evitar el flag.
-
- δO φ--> ∩ Existe código para sobreescribir/mover un programa en memoria.π
-
- Θ- Causa:π Instrucción REP MOVSB/MOVSW o reiteración exagerada de movi-
- mientos de valores a memoria.
-
- δ# φ--> ∩ Rutina de desencriptado o trampa para debuggers.π
-
- Θ- Causa:π Código para desencriptar. El ThunderByte capta multitud de
- variaciones entre desencriptadores y no es fácil evitar este
- flag.
-
- δt φ--> ∩ Código para ser ejecutado en un tiempo concreto (día u hora).π
-
- Θ- Causa:π Llamada a las funciones 02 ó 04 de la int. 1Ah. Llamada a las
- funciones 2Ah ó 2Ch de la int. 21h.
-
- δT φ--> ∩ Tiempo incorrecto en el archivo.π
-
- Θ- Causa:π Segundos en el archivo a 60-62 o años con 100 más de los co-
- rrectos.
-
- δB φ--> ∩ Vuelta al punto de entrada después de modificaciones en él.π
-
- Θ- Causa:π La instrucciones habituales de sobreescribir los tres bytes
- iniciales con el código original, que en un COM infectado
- ocupa el JMP inicial al código del virus.
-
- δF φ--> ∩ Acceso sospechoso a archivo.π
-
- Θ- Causa:π Llamada pura y dura a la función 40h de la int. 21h y apertu-
- ra por medio de la función 3D02h de la int. 21h.
-
- δU φ--> ∩ Llamada a una función o interrupción indocumentada.π
-
- Θ- Causa:π Ello mismo. Instrucciones como INT 7Ah, o la función 0FEh de
- la int. 21h, etc.
-
- δS φ--> ∩ Rutina de búsqueda de ejecutables.π
-
- Θ- Causa:π Llamada a las funciones 4Eh y 4Fh de la int. 21h con DX apun-
- tando a la cadena '*.EXE' o '*.COM', o simplemente estas ca-
- denas.
-
- δX φ--> ∩ Capacidades stealth.π
-
- Θ- Causa:π Exactamente, las instrucciones "CMP AH,11h", "CMP AH,12h",
- "CMP AH, 4Eh" y "CMP AH, 4Fh", así como los pares de instruc-
- ciones "SUB WORD PTR [Dir], Val / SBB WORD PTR [Dir+2], +00".
-
-
- Bien, y aquí se acaba por este número (que ya es bastante, co*o*es).
- Al próximo, más... ¿y qué veremos en el próximo número? Pues no lo sé, ya se
- me ocurrirá algo.
-
- ∞Líyak el Oscuroπ
-